/*
******************
* author: 马丰彦
* date: 2019-05-09
* function: urlencode
******************
*/
function urlencode(clearString) {
  var output = ''
  var x = 0
  clearString = utf16to8(clearString.toString())
  var regex = /(^[a-zA-Z0-9-_.]*)/
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x))
    if (match !== null && match.length > 1 && match[1] !== '') {
      output += match[1]
      x += match[1].length
    } else {
      if (clearString[x] === ' ') {
        output += '+'
      } else {
        var charCode = clearString.charCodeAt(x)
        var hexVal = charCode.toString(16)
        output += '%' + (hexVal.length < 2 ? '0' : '') + hexVal.toUpperCase()
      }
      x++
    }
  }
  function utf16to8(str) {
    var out, i, len, c
    out = ''
    len = str.length
    for (i = 0; i < len; i++) {
      c = str.charCodeAt(i)
      if ((c >= 0x0001) && (c <= 0x007F)) {
        out += str.charAt(i)
      } else if (c > 0x07FF) {
        out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F))
        out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F))
        out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
      } else {
        out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F))
        out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
      }
    }
    return out
  }
  return output
}

export default urlencode
